home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1991-09-09 | 20.3 KB | 806 lines |
- '----------------------------------
- ' AMOS Compiler shell accessory
- ' V 1.1
- ' By Fran�ois Lionet
- ' (c) Europress Software Ltd. 1991
- '----------------------------------
- '
- Global PATH$,DPATH$,PRAM$,CNAME$,FLAG$,FACC,CFLASH$
- '
- CNAME$="Compiler_Configuration"
- PRAM$="RAM:AMOS_Compiler_Temp"
- DPATH$=":AMOS_System"
- VER$="1.1"
- '
- ' Colour to flash when un-squashing compiled programs. >31 for no flash
- ' Read Welcome text file for more infos...
- CFLASH$="-Z32"
- '
- ' Enough RAM?
- Close Workbench
- Close Editor
- Set Sprite Buffer 48
- If Chip Free+Fast Free<80*1024
- Screen Open 0,640,24,2,Hires : Colour 1,$FFF : Curs Off
- Centre ">>> Sorry, the compiler needs at least 80 Kbytes free to run. <<<"
- Print : Print : Centre "Press any key"
- Wait Key : Edit
- End If
- '
- ' Get the directories
- On Error Proc _NO_DISC
- If Exist(PRAM$+"/"+CNAME$)
- DPATH$=PRAM$
- Open In 1,PRAM$+"/Compiler_Origin"
- Input #1,PATH$
- Close
- End If
- '
- Break Off
- Change Mouse 4+6
- _UNPACK_FADE[10,0,2]
- _UNPACK_ICONS
- _UNPACK_INFO
- _LOAD_CONFIGURATION
- _SET_ZONES
- For B=1 To 3
- _ANIMATE_BUTTON[B,0]
- Next
- NOINFO
- _RESET_COMPILE
- '
- ' Load ACmp program
- On Error Proc _FATAL_DISC_ERROR
- If Not Extension_5_00AE
- INFO['>>> Loading "ACmp" program <<<']
- If PATH$<>""
- Extension_5_0098 PATH$+"/ACmp"
- Else
- Extension_5_0098 DPATH$+"/ACmp"
- End If
- NOINFO
- End If
- '
- ' Copy into ram-disc?
- _GETFLAG[5]
- If Param
- If Exist("Ram:")
- If DPATH$<>PRAM$
- _COPY_FOLDER[DPATH$,PRAM$]
- If Param
- PATH$=Dir$ : C=Instr(PATH$,":") : PATH$=Left$(PATH$,C-1)+DPATH$
- Open Out 1,PRAM$+"/Compiler_Origin"
- Print #1,PATH$
- Close
- DPATH$=PRAM$
- End If
- End If
- End If
- End If
- '
- ' Menu loop
- Do
- Repeat
- Multi Wait
- Z=Mouse Zone
- If Mouse Key=2
- INFO[">>> Compiler shell version "+VER$+" -"+Str$(Chip Free+Fast Free+17000)+" bytes free to compile. <<<"]
- While Mouse Key=2 : Wend
- NOINFO
- Wait 16
- End If
- Until Z<>0 and Mouse Key=1
- _ANIMATE_BUTTON[Z,-1]
- While Mouse Key : Wend
- If Z=4 : _COMPILE : End If
- If Z=5 : _THEEND : End If
- Loop
- '
- Procedure _COMPILE
- '
- On Error Proc _GENERAL_DISC_ERROR
- Resume Label _FINISH_COMPILE
- '
- _INIT_COMPILE
- Screen Close 1
- '
- Do
- _GETFLAG[1] : C$=" -D"+Mid$(Str$(Param),2)
- S$=Fsel$("*.AMOS","","Please choose program to compile.","QUIT to abort compilation.")
- If S$="" : INFO[">>> Compilation cancelled. <<<"] : KWAIT : Goto _FINISH_COMPILE : End If
- '
- _GETFLAG[2] : C$=C$+Mid$(Str$(Param),2)
- D$=Fsel$("**","","Please choose destination file name.",'"OK" for default name.')
- If D$=""
- _GETFLAG[3]
- If Upper$(Right$(S$,5))=".AMOS"
- If Param<2
- D$=Left$(S$,Len(S$)-5)
- Else
- D$=Left$(S$,Len(S$)-5)+"_C.AMOS"
- End If
- End If
- End If
- Exit If D$<>""
- INFO[">>> Please choose a .AMOS program, or enter object name. <<<"]
- KWAIT : NOINFO
- Loop
- '
- _GETFLAG[3] : TYPE=Param : If TYPE=2 : TYPE=3 : End If
- '
- C$='"'+S$+'"'+C$+" -O"+'"'+D$+'"'
- _GETFLAG[10] : C$=C$+" -S"+Mid$(Str$(Param),2)
- _GETFLAG[9] : C$=C$+" -E"+Mid$(Str$(Param),2)
- _GETFLAG[8] : C$=C$+" -W"+Mid$(Str$(Param),2)
- _GETFLAG[4] : If TYPE=1 : Add TYPE,Param : End If
- _GETFLAG[12] : If Param : C$=C$+" -L" : End If
- C$=C$+" -T"+Mid$(Str$(TYPE),2)
- C$=C$+" -F"+DPATH$+"/"+" -C"+DPATH$+"/"+CNAME$
- C$=C$+" "+CFLASH$
- '
- Timer=0 : Extension_5_006E C$,$12345678 : E$= Extension_5_0078
- T=Timer/50 : M=T/60 : S=T mod 60
- '
- If E$=""
- SZ= Extension_5_00BE
- A$="Object size:"+Str$(SZ)+" bytes -"+Str$( Extension_5_00BE )+" instructions - Compiled in"
- If M : A$=A$+Str$(M)+" M." : End If
- A$=A$+Str$(S)+" Second" : If S>1 : A$=A$+"s" : End If
- A$=A$+"."
- INFO[A$]
- _GETFLAG[11]
- If Param<>0 and TYPE<>3
- KWAIT
- INFO[">>> Squashing program. Press CONTROL-C to cancel squashing <<<"]
- DD$=D$+"_Temp"
- _SQUASH_A_PROG[D$,DD$,1]
- If Param>0
- A$=">>> Successfull squash, final size:"+Str$(Param)+","+Str$(SZ-Param)+" bytes saved. <<<"
- INFO[A$]
- Else
- If Param=0
- INFO[">>> Squash interrupted. <<<"]
- End If
- If Param<0
- INFO[">>> Un-successfull squash, no object file on disc. <<<"]
- End If
- End If
- On Error Proc _SKIP_DISC_ERROR
- Resume Label NOKIL1
- Kill D$
- NOKIL1:
- Resume Label NOKIL2
- Rename DD$ To D$
- NOKIL2:
- End If
- Else
- A$=">>> "+E$+" <<<" : INFO[A$]
- End If
- KWAIT
- '
- _FINISH_COMPILE:
- _UNPACK_ICONS
- _RESET_COMPILE
- NOINFO : Screen 0
- End Proc
- Procedure _NO_DISC
- Screen Open 0,640,24,2,Hires : Colour 1,$FFF : Curs Off
- Centre "I cannot reach the crucial files from your disc,"
- Print : Centre "please read the manual for more informations."
- Print : Centre ">>> Press any key <<<"
- Wait Key : Edit
- End Proc
- Procedure _FATAL_DISC_ERROR
- INFO[">>> Disc error: AMOS_System MUST be in the CURRENT drive. <<<"]
- KWAIT
- _THEEND
- End Proc
- Procedure _GENERAL_DISC_ERROR
- Close
- INFO[">>> Disc error, check your disc drive and free space on disc. <<<"]
- KWAIT
- Resume Label
- End Proc
- Procedure _SKIP_DISC_ERROR
- Resume Label
- End Proc
- Procedure _RESET_COMPILE
- LX=72 : Y3=92
- Bob Off 1 : Update
- Synchro On : Update On
- Make Mask 1
- For X=0 To 9*23 Step 9
- Paste Bob LX+X,Y3,1
- Next
- Wait Vbl
- OX=192 : DX=16
- Screen Copy 1,OX,34,OX+72,34+33 To 0,DX,Y3
- End Proc
- Procedure _INIT_COMPILE
- OX=192 : DX=16 : Y3=92 : LX=72
- For N=1 To 6 : Make Mask N : Next
- Wait Vbl : Screen Copy 1,OX,68,OX+72,68+33 To 0,DX,Y3
- Set Bob 1,-1,, : Bob 1,LX,Y3,1
- Channel 1 To Bob 1
- A$=A$+" Let RA=0; Let RB=0; Let R0=0; Let A=1;"
- A$=A$+"Loop: If RA<>RB Jump More;"
- A$=A$+" Pause; Jump Loop;"
- A$=A$+"More: Let R0=R0+1; If R0=6 Jump Plus;"
- A$=A$+" Let A=A+1; Jump Again;"
- A$=A$+"Plus: Let R0=0; Let X=X+9; Let A=1;"
- A$=A$+"Again:Let RB=RB+1; Pause;"
- A$=A$+" Jump Loop;"
- Amal 1,A$
- Amal On
- Wait 5
- Synchro Off : Update Off
- End Proc
- Procedure _LOAD_CONFIGURATION
- On Error Proc _SKIP_DISC_ERROR
- Resume Label NOLOAD
- '
- Do
- A$=">>> Cannot load configuration file. <<<"
- If Exist(DPATH$+"/"+CNAME$)
- A$=">>> Configuration file corrupted. <<<"
- INFO[">>> Loading "+CNAME$+" <<<"]
- Open In 1,DPATH$+"/"+CNAME$ : L=Lof(1) : Close
- Erase 9 : Reserve As Work 9,L
- Bload DPATH$+"/"+CNAME$,Start(9)
- CONF=Hunt(Start(9) To Start(9)+Length(9),"[")+1
- If CONF
- If Chr$(Peek(CONF+60))="]"
- FLAG$=Space$(12)
- For C=0 To Len(FLAG$)-1
- Poke Varptr(FLAG$)+C,Peek(CONF+C)
- Next
- FLAG=True
- End If
- End If
- End If
- Erase 9
- Exit If FLAG
- Goto KIPS
- '
- NOLOAD: A$=">>> Cannot load configuration file. <<<"
- KIPS: INFO[A$] : KWAIT : NOINFO
- CNAME$=Fsel$("Compiler_Configuratio**","","Please select a configuration to load.","Click on SET DIR before leaving.")
- If CNAME$="" : _THEEND : End If
- _GET_DISCNAME[CNAME$] : CNAME$=Param$
- Loop
- NOINFO
- End Proc
- Procedure _SAVE_CONFIGURATION
- On Error Proc _GENERAL_DISC_ERROR
- Resume Label _NOSAVE
- '
- If Exist(DPATH$+"/"+CNAME$)
- Open In 1,DPATH$+"/"+CNAME$ : L=Lof(1) : Close
- Erase 9 : Reserve As Work 9,L
- Bload DPATH$+"/"+CNAME$,Start(9)
- CONF=Hunt(Start(9) To Start(9)+Length(9),"[")+1
- For C=1 To Len(FLAG$)
- Poke CONF,Asc(Mid$(FLAG$,C,1)) : Inc CONF
- Next
- Bsave DPATH$+"/"+CNAME$,Start(9) To Start(9)+L
- If PATH$<>""
- Bsave PATH$+"/"+CNAME$,Start(9) To Start(9)+L
- End If
- Erase 9
- FLAG=True
- End If
- _NOSAVE:
- If FLAG=0
- INFO[">>> Cannot save configuration file. <<<"]
- KWAIT
- End If
- End Proc
- Procedure _GET_DISCNAME[N$]
- For N=Len(N$) To 1 Step -1
- A$=Mid$(N$,N,1)
- Exit If(A$="/") or(A$=":")
- Next
- N$=Mid$(N$,N+1)
- End Proc[N$]
- Procedure _GETFLAG[N]
- End Proc[Asc(Mid$(FLAG$,N,1))-48]
- Procedure _SETFLAG[N,V]
- Mid$(FLAG$,N)=Chr$(48+V)
- End Proc
- Procedure _ANIMATE_BUTTON[Z,FLAG]
- '
- Shared _ORIGIN,_DEST,_TYPE
- Y1=48 : Y2=134
- '
- On Z Gosub Z1,Z2,Z3,Z4,Z5,Z6,Z7
- Pop Proc
- '
- Z1:
- If FLAG
- _GETFLAG[1] : _SETFLAG[1,1-Param]
- End If
- _GETFLAG[1] : OX=Param*64 : DX=16 : Goto ZZ
- Z2:
- If FLAG
- _GETFLAG[2] : _SETFLAG[2,1-Param]
- End If
- _GETFLAG[2] : OX=Param*64 : DX=128 : Goto ZZ
- Z3:
- If FLAG
- _GETFLAG[3] : F=Param
- Add F,1,0 To 2
- _SETFLAG[3,F]
- End If
- _GETFLAG[3] : OX=Param*64+128 : DX=240 : Goto ZZ
- Z4: Return
- Z5: OX=0 : DX=16 : Goto CB
- Z6: OX=64 : DX=128
- Wait Vbl : Screen Copy 1,OX,68,OX+64,68+34 To 0,DX,Y2
- Wait 10 : Wait Vbl
- Screen Copy 1,OX,34,OX+64,34+34 To 0,DX,Y2
- '
- Auto View Off : Unpack 13 To 2 : For N=0 To 31 : Colour N,0 : Next
- Screen Display 2,164,100,, : Screen To Back : Screen Hide 3
- Auto View On : Wait Vbl
- Screen 0 : Fade 1 : Wait 16
- Screen 2 : Screen To Front : Fade 1 To 1
- KWAIT
- Fade 1 : Wait 16 : Screen To Back
- Screen 0 : Fade 1 To 1 : Wait 16 : Screen Show 3
- Screen Close 2
- Wait Vbl : Screen Copy 1,OX,34,OX+64,34+34 To 0,DX,Y2
- Return
- Z7: OX=128 : DX=240 : Gosub CB
- _SETUP_MENU : Return
- '
- ' Animates the clickable buttons
- CB:
- Wait Vbl
- Screen Copy 1,OX,68,OX+64,68+34 To 0,DX,Y2
- Wait 10 : Wait Vbl
- Screen Copy 1,OX,34,OX+64,34+34 To 0,DX,Y2
- Return
- '
- ' Animates the drop buttons
- ZZ:
- Screen 1 : Get Bob 9,OX,0 To OX+63,33 : No Mask 9 : Screen 0
- Set Bob 2,-1,, : Bob 2,DX,Y1-32,9 : Limit Bob 2,0,Y1 To 320,Y1+32 : Update
- Channel 2 To Bob 2
- Amal 2,"Move 0,32,8; Move 0,-4,4; Move 0,4,4;"
- Amal On : While Chanmv(2) : Wait Vbl : Wend
- Bob Off : Del Bob 9
- Update
- Return
- End Proc
- Procedure _THEEND
- If DPATH$=PRAM$
- _GETFLAG[6]
- If Param=0
- INFO[">>> Deleting compiler work folder from ram-disc <<<"]
- _DELETE_FOLDER[PRAM$]
- NOINFO : Wait 8
- End If
- End If
- _GETFLAG[7] : If Param=0 : Extension_5_00A0 : End If
- Fade 1 : Wait 16
- Screen Close 3
- Screen Close 1
- Screen Close 0
- Edit
- End Proc
- Procedure _DELETE_FOLDER[S$]
- Dim FILE$(64),NC$(2)
- On Error Proc _SKIP_DISC_ERROR
- Resume Label _SKIP
- '
- Set Dir ,""
- If Upper$(Left$(S$,4))<>"RAM:"
- INFO[">>> Warning! I do not want to delete:"+S$+"! <<<"] : KWAIT
- Else
- '
- A$=Dir First$(S$+"/**")
- While A$<>""
- FILE$(N)=Left$(A$,30)-" " : Inc N
- A$=Dir Next$
- Wend
- If N
- For C=0 To N-1
- Kill S$+"/"+FILE$(C)
- Next
- End If
- Kill S$
- End If
- '
- _SKIP:
- End Proc
- Procedure _COPY_FOLDER[S$,D$]
- Dim FILE$(64),NC$(5)
- On Error Proc _FATAL_DISC_ERROR
- '
- INFO[">>> Copying AMOS_System folder onto ram-disc. <<<"]
- NC$(0)="W.LIB"
- NC$(1)="ACMP"
- NC$(2)="AMOS1_2_PAL.ENV"
- NC$(3)="AMOS1_2_NTSC.ENV"
- NC$(4)="AMOS1_2.ENV"
- NC$(5)="COMPILER_CONFIGURATION.LARGE"
- NCOP=5
- Set Dir ,""
- A$=Dir First$(S$+"/**")
- While A$<>""
- B$=Left$(A$,30)-" "
- Do
- For NC=0 To NCOP
- Exit If Upper$(B$)=NC$(NC),2
- Next
- FILE$(N)=B$
- TL=TL+Val(Mid$(A$,30))
- Inc N
- Exit
- Loop
- A$=Dir Next$
- Wend
- If Chip Free+Fast Free<TL+100*1024
- INFO[">>> Not enough free ram to copy libraries to the ram-disc. <<<"]
- KWAIT
- Goto _NORAM
- End If
- Mkdir D$
- If N
- For C=0 To N-1
- A$=S$+"/"+FILE$(C) : B$=D$+"/"+FILE$(C)
- I$=">>> Copying: "+FILE$(C)+" to ram-disc <<<" : INFO[I$]
- _FCOPY[A$,B$]
- Next
- End If
- F=-1
- _NORAM:
- NOINFO
- Set Dir ,".info/*.info/*.*.info"
- End Proc[F]
- Procedure _FCOPY[S$,D$]
- On Error Proc _FATAL_DISC_ERROR
- Open In 1,S$
- Open Out 2,D$
- LF=Lof(1)
- Do
- Exit If P>=LF
- L=Min(1024,LF-P)
- A$=Input$(1,L)
- Print #2,A$;
- Add P,L
- Loop
- Close 1
- Close 2
- End Proc
- Procedure _SET_ZONES
- NZ=7
- Reserve Zone NZ
- ' Set up zones
- For Z=1 To NZ
- Read A,B,C,D : Set Zone Z,A,B To C,D
- Next
- Data 16,48,79,80
- Data 128,48,191,80
- Data 240,48,303,80
- Data 16,93,88,123
- Data 16,134,79,166
- Data 128,134,191,166
- Data 240,134,303,166
- End Proc
- Procedure _UNPACK_ICONS
- Auto View Off
- Unpack 12 To 1 : Screen Hide 1
- Auto View On : _MOUSE_PALETTE
- Screen 0
- End Proc
- Procedure _UNPACK_FADE[BK,SC,SP]
- Dim C(31)
- Auto View Off
- Unpack BK To SC : Screen Hide : _MOUSE_PALETTE : View : Wait Vbl
- For N=0 To 31
- C(N)=Colour(N) : Colour N,0
- Next
- Screen Show : View : Wait Vbl
- Fade SP,C(0),C(1),C(2),C(3),C(4),C(5),C(6),C(7),C(8),C(9),C(10),C(11),C(12),C(13),C(14),C(15),C(16),C(17),C(18),C(19)
- Wait SP*16
- _MOUSE_PALETTE
- Auto View On
- End Proc
- Procedure _UNPACK_INFO
- Auto View Off
- Unpack 11 To 3 : Screen Hide
- Screen Display 3,,228,, : View
- _MOUSE_PALETTE : For N=0 To 15 : Colour N,0 : Next
- Screen Show
- Auto View On
- End Proc
- Procedure _MOUSE_PALETTE
- For C=16 To 31
- Colour C,0
- Next
- For C=16 To 24
- Read CC
- Colour C,CC
- Next
- Data $0,$FFF,$FD0,$F90,$FC8,$DA4,$C70,$940,$F00
- End Proc
- Procedure _MAKE_SETUP_SCREEN
- Fade 1 : Wait 16
- Auto View Off
- Unpack 11 To 3 : Screen Hide 3 : _MOUSE_PALETTE
- Screen Open 1,640,200,8,Hires
- Curs Off : Flash Off : For C=0 To 31 : Colour C,0 : Next
- Screen Copy 3,0,0,640,8 To 1,0,0
- For Y=8 To 192 Step 8
- Screen Copy 3,0,9,640,9+8 To 1,0,Y
- Next
- Screen Copy 3,0,21-8,640,21 To 1,0,192
- Auto View On
- Fade 1 To 3
- _UNPACK_INFO
- Screen To Back 3
- Screen 1
- End Proc
- Procedure _SETUP_MENU
- Dim JMP$(64),ZIT(64),ITZ(64),ZBASE(64)
- _MAKE_SETUP_SCREEN
- Paper 6 : Pen 7 : Ink 5
- PAGE=1
- ' Handle menu
- MK_MENU:
- Curs Off : Gosub DR_MENU
- NOZ=1
- Do
- Repeat
- Multi Wait
- Z=Mouse Zone : K=Mouse Key
- If Z<>OLDZ
- If OLDZ>0 : ACT=-1 : IT=ZIT(OLDZ) : OLDZ=-1 : Gosub DR_ITEM : End If
- If Z>0 : OLDZ=Z : ACT=Z : IT=ZIT(Z) : ZNE=ZBASE(IT) : Gosub DR_ITEM : End If
- End If
- Until Z<>0 and K<>0
- If JMP$(Z)<>"" : Gosub JMP$(Z) : End If
- ACT=Z : ZNE=ZBASE(IT) : Gosub DR_ITEM
- If K=1 : Repeat : Multi Wait : Until Mouse Key=0 : End If
- Loop
- '
- MN_BACK:
- Pop
- Fade 1 : Wait 16
- _UNPACK_ICONS
- Screen 0 : Fade 1 To 1
- Pop Proc
- '
- MN_SAVE:
- Timer=0
- INFO[">>> Saving configuration file <<<"]
- Wait 8 : Screen To Front 3 : Wait 8
- _SAVE_CONFIGURATION
- Repeat : Until Timer>50
- Screen To Back 3
- NOINFO
- Screen 1
- Return
- '
- ST_FLAG: V=1-V : Gosub "POK"+VTYPE$ : Return
- ' Draw menu page
- DR_MENU:
- Reserve Zone 64
- IT=0 : ZNE=1 : NOZ=0 : ACT=-1 : OLDPAR=-1
- Repeat
- Inc IT : ZBASE(IT)=ZNE : Gosub DR_ITEM
- Until FLAG=False
- Return
- ' Draw one menu item
- DR_ITEM:
- LAB$="L"+(Str$(PAGE)-" ")+"_"+(Str$(IT)-" ")
- On Error Goto NO_IT
- Restore LAB$ : Read IT$
- On Error
- M=0 : XX=-1
- Repeat
- NEND=Instr(IT$,"|",M+1)
- ENC=0 : LBL$="" : FL=0 : ZZ=0 : NB=0
- Repeat
- N=M+1
- M=Instr(IT$,",",N) : M2=Instr(IT$,":",N) : If M>M2 : M=0 : End If
- If M=0 or(NEND<>0 and M1>NEND) : M=M2 : FL=1 : End If
- A$=Upper$(Mid$(IT$,N,1)) : Inc N
- If A$="E" : ENC=1 : End If
- If A$="L" : Gosub GT_STR : LBL$=A$ : Inc ZZ : End If
- If A$="C" : CNT=1 : End If
- If A$="X" : Gosub GT_STR : XX=Val(A$) : End If
- If A$="Y" : Gosub GT_STR : YY=Val(A$) : End If
- Until FL
- If NEND
- A$=Mid$(IT$,M+1,NEND-M-1)
- Else
- A$=Mid$(IT$,M+1)
- End If
- Gosub DR_WORD
- M=NEND
- Until NEND=0
- FLAG=True
- Return
- '
- DR_WORD:
- If XX<0 : XX=40-Len(A$)/2 : End If
- Locate XX,YY
- '
- FST=0
- If Left$(A$,1)="&"
- Inc FST
- B$=Upper$(Mid$(A$,2,1)) : A$=Mid$(A$,3)
- If B$="F"
- Gosub GT_VAL
- A$=" No " : If V : A$=" Yes " : End If
- End If
- End If
- '
- X1=X Graphic(XX)-3 : Y1=Y Graphic(YY)-2 : X2=X Graphic(XX+Len(A$))+2 : Y2=Y1+11
- '
- If ZZ<>0 or NOZ=0 or FST<>0
- Inverse Off : If ZZ<>0 and ACT=ZNE : Inverse On : End If
- Print A$;
- If ENC<>0 and NOZ=0 : Box X1,Y1 To X2,Y2 : End If
- End If
- If ZZ<>0
- If NOZ=0
- Set Zone ZNE,X1,Y1 To X2,Y2
- ZIT(ZNE)=IT : ITZ(IT)=ZNE
- If LBL$<>""
- JMP$(ZNE)=LBL$
- End If
- End If
- Inc ZNE
- End If
- XX=XX+(X2-X1)/8+1
- Return
- '
- NO_IT: Resume NO_IT2
- NO_IT2: FLAG=False
- Return
- '
- GT_STR:
- A$=Mid$(IT$,N,M-N)
- Return
- '
- GT_VAL:
- VTYPE$=Left$(A$,1) : ADV=Val(Mid$(A$,2))
- Goto "PIK"+VTYPE$
- PIKF: _GETFLAG[ADV] : V=Param : Return
- POKF: _SETFLAG[ADV,V] : Return
- '
- ' Datas page 1
- L1_1: Data "C,Y1,E: Compiled program setup "
- L1_2: Data "Y3,X6:- Include error messages?|X66,E,LSt_Flag:&FF09"
- L1_3: Data "Y5,X6:- Create default screen?|X66,E,LSt_Flag:&FF10"
- L1_4: Data "Y7,X6:- Send AMOS TO BACK upon booting?|X66,E,LSt_Flag:&FF08"
- L1_5: Data "Y9,X6:- CLI programs to run in the background?|X66,E,LSt_Flag:&FF04"
- L1_6: Data "Y11,X6:- Long forward jumps (option -L for VERY long programs)?|X66,E,LSt_Flag:&FF12"
- L1_7: Data "C,Y13,E: Compiler setup "
- L1_8: Data "Y15,X6:- Copy all libraries onto ram-disc?|X66,E,LSt_Flag:&FF05"
- L1_9: Data "Y17,X6:- Leave libraries on ram-disc upon exiting?|X66,E,LSt_Flag:&FF06"
- L1_10: Data 'Y19,X6:- Keep compiler program "ACmp" in memory upon exiting?|X66,E,LSt_Flag:&FF07'
- L1_11: Data "Y21,X6:- Squash compiled program?|X66,E,LSt_Flag:&FF11"
- L1_12: Data "E,X72,Y23,LMn_Back: Exit "
- L1_13: Data "E,X45,Y23,LMn_Save: Save this configuration "
- End Proc
- Procedure _SQUASH_A_PROG[S$,D$,FIRST]
- '
- On Error Proc _GENERAL_DISC_ERROR
- Resume Label SQERROR
- '
- Open In 1,S$
- Open Out 2,D$
- '
- HEAD1$=Input$(1,12)
- NHUNK=Leek(Varptr(HEAD1$)+8)
- HEAD2$=Input$(1,4*(2+NHUNK))
- '
- Print #2,HEAD1$;
- Print #2,HEAD2$;
- '
- For H=0 To NHUNK-1
- FLAG=True : If FIRST<>0 and H=0 and NHUNK>1 : FLAG=0 : End If
- Gosub SQHUNK
- Exit If BRK
- Loke Varptr(HEAD2$)+4*(2+H),HH
- Next
- '
- If BRK=0
- Pof(2)=12
- Print #2,HEAD2$;
- LPROG=Lof(2)
- Close
- Else
- Close
- Kill D$
- LPROG=0
- End If
- Goto SQEND
- '
- SQERROR:
- On Error Proc _SKIP_DISC_ERROR
- Resume Label KK
- Kill D$
- KK: LPROG=-1
- Goto SQEND
- '
- SQHUNK:
- H$=Input$(1,8) : Pof(1)=Pof(1)-8
- HH=Leek(Varptr(H$)) and $C0000000
- LP=Leek(Varptr(H$)+4) : HH=HH or LP : Rol.l 2,LP
- Add LP,8+4
- F=0
- '
- Erase 8 : Reserve As Work 8,LP+16
- '
- OLDPOF=Pof(1)
- '
- _ONCE_AGAIN:
- AP=Start(8) : P=0
- Repeat
- L=2048 : If P+L>LP : L=LP-P : End If
- A$=Input$(1,L)
- Copy Varptr(A$),Varptr(A$)+L To AP
- Add P,L : Add AP,L
- Until P>=LP
- '
- AP=Start(8)
- '
- If FLAG<>0 and F=0
- If Leek(AP)<>$78566467
- '
- L= Extension_5_00CE(AP+8,LP-12,-1,512,17)
- If L=-1
- Pof(1)=OLDPOF : F=-1 : Goto _ONCE_AGAIN
- End If
- If L=-2 : BRK=-1 : Goto _ABORT : End If
- '
- LH=(L+3) and $FFFFFFFC
- Copy AP+8,AP+8+LH To AP+8+12
- Loke AP+8,$78566467 : Loke AP+12,LP : Loke AP+16,L
- Add LH,12 : Loke AP+4,LH/4
- HH=(HH and $C0000000) or(LH/4)
- Loke AP+8+LH,$3F2
- LP=8+LH+4
- End If
- End If
- '
- A$=Space$(2048) : P=0
- Repeat
- L=2048 : If P+L>LP : L=LP-P : End If
- Copy AP,AP+L To Varptr(A$)
- Print #2,Left$(A$,L);
- Add P,L : Add AP,L
- Until P>=LP
- '
- _ABORT:
- Erase 8
- Return
- '
- SQEND:
- End Proc[LPROG]
- Procedure INFO[A$]
- Screen 3
- Ink 6 : Bar 6,4 To Screen Width-8,Screen Height-4
- Ink 7,6 : L=Text Length(A$) : Text 320-L/2,12,A$
- _MOUSE_PALETTE : Fade 1,$0,$F00,$E60,$DA0,$DA0,$DD0,$C,$EEE : Wait 8
- Screen 0
- End Proc
- Procedure NOINFO
- Screen 3 : Fade 1,0,0,0,0,0,0,0,0 : Wait 8 : Screen 0
- End Proc
- Procedure KWAIT
- Bell
- Update On : Hide On
- Repeat
- Sprite 8,X Mouse,Y Mouse,8
- Multi Wait
- Until Mouse Key
- While Mouse Key : Wend
- Sprite Off : Wait Vbl
- Show On
- End Proc